package ar.com.arkios.kfcon4d.dao;

import ar.com.arkios.kfcon4d.util.RegisterBuilder;
import ar.com.arkios.kfconmodelo.modelo.Lote;
import ar.com.arkios.kfconmodelo.modelo.Orden;
import ar.com.arkios.j4d.opDataArray;
import java.util.List;
import org.apache.log4j.Logger;

public class LoteDAO extends GenericOperDAO<Lote> {

    private static final Logger miLogger = Logger.getLogger(LoteDAO.class);

    /** Nombre de la tabla LoteGranel */
    private static final String LOTES = "LoteGranel";
    
    // Columnas de la tabla LoteGranel
    private static final String LOTES_LOTENRO = "NumeroSAP";
    private static final String LOTES_VARIEDAD = "VariedadReal";
    private static final String LOTES_VARIEDAD_C = "VariedadComercial";
    private static final String LOTES_PROVEEDOR = "QuintaReal";
    private static final String LOTES_PROVEEDOR_C = "QuintaComercial";
    private static final String LOTES_ATMOSFERA = "Atmosfera";
    private static final String LOTES_CANTIDAD = "PesoTotal";
    private static final String LOTES_BINES = "Cantidad";
    private static final String LOTES_SENASA = "Senasa";
    private static final String LOTES_UMI = "UMI";
    private static final String LOTES_EUREGAP = "Euregap";
    private static final String LOTES_ACTIVO = "Activo";
    
    /** Nombres de las columnas a ser utilizadas en el alta de la tabla LOTES. */
    private static final String[] LOTES_COLUMNAS = {LOTES_LOTENRO, LOTES_VARIEDAD, LOTES_VARIEDAD_C, 
    LOTES_PROVEEDOR, LOTES_PROVEEDOR_C, LOTES_ATMOSFERA,
    LOTES_CANTIDAD, LOTES_BINES, LOTES_SENASA, LOTES_UMI, LOTES_EUREGAP, LOTES_ACTIVO};
    
    /** Nombres de las columnas a ser utilizada como PK de LOTES. */
    private static final String[] LOTES_PK = {LOTES_LOTENRO};
    
    /** Nombres de las columnas a modificar en reescritura. */
    private static final String[] LOTES_MOD = {LOTES_LOTENRO, LOTES_BINES, LOTES_ACTIVO};

    @Override
    protected String getEntidadTableName() {
        return LOTES;
    }

    @Override
    protected String getPKProperty() {
        return "miCodigo";
    }

    @Override
    protected String getActiveFieldName() {
        return LOTES_ACTIVO;
    }

    @Override
    protected opDataArray[] mapListEntidadTo4D(List<Lote> laLista) {
        opDataArray[] losLotes = new opDataArray[getMiEntidadFields().mSize];

        for (int i = 0; i < losLotes.length; i++) {
            losLotes[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Lote lote : laLista) {            
            RegisterBuilder loteRegisterBuilder = new RegisterBuilder(getMiEntidadFields());
            loteRegisterBuilder.setData(LOTES_LOTENRO, lote.getMiCodigo());
            loteRegisterBuilder.setData(LOTES_VARIEDAD, lote.getMiVariedadCod());
            loteRegisterBuilder.setData(LOTES_VARIEDAD_C, lote.getMiVariedadCod());
            String proveedor = lote.getMiProveedorNombre().substring(0, Math.min(10, lote.getMiProveedorNombre().length()));
            loteRegisterBuilder.setData(LOTES_PROVEEDOR, proveedor);
            loteRegisterBuilder.setData(LOTES_PROVEEDOR_C, proveedor);
            loteRegisterBuilder.setData(LOTES_ATMOSFERA, lote.getMiAtmosferaControlada());
            loteRegisterBuilder.setData(LOTES_CANTIDAD, lote.getMiCantidad());
            loteRegisterBuilder.setData(LOTES_BINES, lote.getMiCantidadBins());
            loteRegisterBuilder.setData(LOTES_SENASA, lote.getMiSenasaCod());
            loteRegisterBuilder.setData(LOTES_UMI, lote.getMiUmiCod());
            loteRegisterBuilder.setData(LOTES_EUREGAP, lote.getMiEuregapCoD());
            loteRegisterBuilder.setData(LOTES_ACTIVO, true);            
            
            opDataArray dataAux = loteRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadFields().mSize; j++) {
               losLotes[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losLotes;
    }

    @Override
    protected opDataArray[] mapListEntidadModTo4D(List<Lote> laLista) {
        opDataArray[] losLotes = new opDataArray[getMiEntidadModFields().mSize];

        for (int i = 0; i < losLotes.length; i++) {
            losLotes[i] = new opDataArray(laLista.size());
        }

        int i = 0;
        for (Lote lote : laLista) {            
            RegisterBuilder loteRegisterBuilder = new RegisterBuilder(getMiEntidadModFields());
            loteRegisterBuilder.setData(LOTES_LOTENRO, lote.getMiCodigo());
//            loteRegisterBuilder.setData(LOTES_VARIEDAD, lote.getMiVariedadCod());
//            loteRegisterBuilder.setData(LOTES_PROVEEDOR, lote.getMiProveedorNombre());
//            loteRegisterBuilder.setData(LOTES_ATMOSFERA, lote.getMiAtmosferaControlada());
//            loteRegisterBuilder.setData(LOTES_CANTIDAD, lote.getMiCantidad());
            loteRegisterBuilder.setData(LOTES_BINES, lote.getMiCantidadBins());
//            loteRegisterBuilder.setData(LOTES_SENASA, lote.getMiSenasaCod());
//            loteRegisterBuilder.setData(LOTES_UMI, lote.getMiUmiCod());
//            loteRegisterBuilder.setData(LOTES_EUREGAP, lote.getMiEuregapCoD());
            loteRegisterBuilder.setData(LOTES_ACTIVO, true);            
            
            opDataArray dataAux = loteRegisterBuilder.getDataArray();
            for (int j = 0; j < getMiEntidadModFields().mSize; j++) {
               losLotes[j].mDataArray[i] = dataAux.mDataArray[j];
            }
            i += 1;
        }
        return losLotes;
    }
        
    @Override
    protected String[] getEntidadFieldsNames() {
        return LOTES_COLUMNAS;
    }

    @Override
    protected String[] getEntidadPKFieldsNames() {
        return LOTES_PK;
    }

    @Override
    protected String[] getEntidadModFieldsNames() {
        return LOTES_MOD;
    }
    
}